home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / MISC.SWG / 0055_ROMAN numbers.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-02  |  6KB  |  275 lines

  1. }
  2. From: BRIAN PAPE
  3. Subj: YEAR ( ROMAN )
  4. This is from last semester's computer bowl.  Only problem is that it
  5. converts from Roman to Arabic.  :)
  6.  
  7.   LCCC Programming Team
  8.  
  9.  East Central College Computer Bowl
  10.  
  11.  03-21-93
  12.  
  13.  "Computer Killers"
  14.  Brian Pape
  15.  Brian Grammer
  16.  Mike Lazar
  17.  Christy Reed
  18.  Matt Hayes
  19.  Coach Steve Banjavcic
  20.  
  21.  Program #2-3
  22.  Time to Completion: 3:47
  23. }
  24.  
  25. program roman;
  26. USES PRINTER;
  27. const
  28.   num = 'IVXLCDM';
  29.   value : array[1..7] of integer = (1,5,10,50,100,500,1000);
  30. var
  31.   i : byte;
  32.   s : string;
  33.   sum : integer;
  34. begin
  35.   assign(lst,'');rewrite(lst);
  36.   writeln('Enter the Roman Numerals: ');
  37.   readln(s);
  38.   i := length(s);
  39.   while (i>=1) do
  40.     begin
  41.       if i > 1 then
  42.         begin
  43.           if pos(s[i],num) <= (pos(s[i-1],num)) then
  44.             begin
  45.               sum := sum + value[pos(s[i],num)];
  46.               dec(i);
  47.             end
  48.           else
  49.             begin
  50.               sum := sum + value[pos(s[i],num)] - value[pos(s[i-1],num)];
  51.               dec(i,2);
  52.             end;  { else }
  53.         end
  54.       else
  55.         begin
  56.           sum := sum + value[pos(s[1],num)];
  57.           dec(i);
  58.         end;  { else }
  59.     end;  { while }
  60.   WRITELN(LST);
  61.   writeln(LST,'Roman numeral: ',s);
  62.   writeln(LST,'Arabic value: ',sum);
  63. end. {  }
  64.  
  65. {*
  66.  *
  67.  *        ROMAN.C  -  Converts integers to Roman numerals
  68.  *
  69.  *             Written by:  Jim Walsh
  70.  *
  71.  *             Compiler  :  Microsoft QuickC v2.5
  72.  *
  73.  *        This Program Is Released To The Public Domain
  74.  *
  75.  *        Additional Comments:
  76.  *
  77.  *        Ported to TP v6.0 by Daniel Prosser.
  78.  *}
  79.  
  80. VAR
  81.   Value, DValue, Error : INTEGER;
  82.   Roman : STRING[80];
  83.  
  84. BEGIN
  85.   Roman := '';
  86.  
  87.   IF ParamCount = 2 THEN
  88.     VAL(ParamStr(1), Value, Error)
  89.   ELSE
  90.     BEGIN
  91.       Write ('Enter an integer value: ');
  92.       ReadLn (Value);
  93.     END; { ELSE }
  94.  
  95.   DValue := Value;
  96.  
  97.   WHILE Value >= 1000 DO
  98.     BEGIN
  99.       Roman := Roman + 'M';
  100.       Value := Value - 1000;
  101.     END; { WHILE }
  102.  
  103.   IF Value >= 900 THEN
  104.     BEGIN
  105.       Roman := Roman + 'CM';
  106.       Value := Value - 900;
  107.     END; { IF }
  108.  
  109.   WHILE Value >= 500 DO
  110.     BEGIN
  111.       Roman := Roman + 'D';
  112.       Value := Value - 500;
  113.     END; { WHILE }
  114.  
  115.   IF Value >= 400 THEN
  116.     BEGIN
  117.       Roman := Roman + 'CD';
  118.       Value := Value - 400;
  119.     END; { IF }
  120.  
  121.   WHILE Value >= 100 DO
  122.     BEGIN
  123.       Roman := Roman + 'C';
  124.       Value := Value - 100;
  125.     END; { WHILE }
  126.  
  127.   IF Value >= 90 THEN
  128.     BEGIN
  129.       Roman := Roman + 'XC';
  130.       Value := Value - 90;
  131.     END; { IF }
  132.  
  133.   WHILE Value >= 50 DO
  134.     BEGIN
  135.       Roman := Roman + 'L';
  136.       Value := Value - 50;
  137.     END; { WHILE }
  138.  
  139.   IF Value >= 40 THEN
  140.     BEGIN
  141.       Roman := Roman + 'XL';
  142.       Value := Value - 40;
  143.     END; { WHILE }
  144.  
  145.   WHILE Value >= 10 DO
  146.     BEGIN
  147.       Roman := Roman + 'X';
  148.       Value := Value - 10;
  149.     END; { WHILE }
  150.  
  151.   IF Value >= 9 THEN
  152.     BEGIN
  153.       Roman := Roman + 'IX';
  154.       Value := Value - 9;
  155.     END; { IF }
  156.  
  157.   WHILE Value >= 5 DO
  158.     BEGIN
  159.       Roman := Roman + 'V';
  160.       Value := Value - 5;
  161.     END; { WHILE }
  162.  
  163.   IF Value >= 4 THEN
  164.     BEGIN
  165.       Roman := Roman + 'IV';
  166.       Value := Value - 4;
  167.     END; { IF }
  168.  
  169.  
  170.   WHILE Value > 0 DO
  171.     BEGIN
  172.       Roman := Roman + 'I';
  173.       DEC (Value);
  174.     END; { WHILE }
  175.  
  176.   WriteLn (DValue,' = ', Roman);
  177. END.
  178.  
  179. {--------------------- Begin of function -----------------------------}
  180.  
  181.  
  182. Function Roman (Number: Integer): String;
  183. { Converts Number to the Roman format.
  184.   If (Number < 1) Or (Number > 3999), the returned string will be empty!
  185. }
  186. Var
  187.   TempStr : String;   { Temporary storage for the result string }
  188. Begin
  189.   TempStr := '';
  190.   If (Number > 0) And (Number < 4000) Then
  191.   Begin
  192.     { One 'M' for every 1000 }
  193.     TempStr := Copy ('MMM', 1, Number Div 1000);
  194.     Number := Number MOD 1000;
  195.     If Number >= 900 Then
  196.     { Number >= 900, so append 'CM' }
  197.     Begin
  198.       TempStr := TempStr + 'CM';
  199.       Number := Number - 900;
  200.     End
  201.     Else
  202.     { Number < 900 }
  203.     Begin
  204.       If Number >= 500 Then
  205.       { Number >= 500, so append 'D' }
  206.       Begin
  207.         TempStr := TempStr + 'D';
  208.         Number := Number - 500;
  209.       End
  210.       Else
  211.         If Number >= 400 Then
  212.         { 400 <= Number < 500, so append 'CD' }
  213.         Begin
  214.           TempStr := TempStr + 'CD';
  215.           Number := Number - 400;
  216.         End;
  217.       { Now Number < 400!!! One 'C' for every 100 }
  218.       TempStr := TempStr + Copy ('CCC', 1, Number Div 100);
  219.       Number := Number Mod 100;
  220.     End;
  221.     If Number >= 90 Then
  222.     { Number >= 90, so append 'XC' }
  223.     Begin
  224.       TempStr := TempStr + 'XC';
  225.       Number := Number - 90;
  226.     End
  227.     Else
  228.     { Number < 90 }
  229.     Begin
  230.       If Number >= 50 Then
  231.       { Number >= 50, so append 'L'}
  232.       Begin
  233.         TempStr := TempStr + 'L';
  234.         Number := Number - 50;
  235.       End
  236.       Else
  237.         If Number >= 40 Then
  238.         { 40 <= Number < 50, so append 'XL' }
  239.         Begin
  240.           TempStr := TempStr + 'XL';
  241.           Number := Number - 40;
  242.         End;
  243.       { Now Number < 40!!! One 'X' for every 10 }
  244.       TempStr := TempStr + Copy ('XXX', 1, Number Div 10);
  245.       Number := Number Mod 10;
  246.     End;
  247.     If Number = 9 Then
  248.     { Number = 9, so append 'IX' }
  249.     Begin
  250.       TempStr := TempStr + 'IX';
  251.     End
  252.     Else
  253.     { Number < 9 }
  254.     Begin
  255.       If Number >= 5 Then
  256.       { Number >= 5, so append 'V' }
  257.       Begin
  258.         TempStr := TempStr + 'V';
  259.         Number := Number - 5;
  260.       End
  261.       Else
  262.         If Number = 4 Then
  263.         { Number = 4, so append 'IV' }
  264.         Begin
  265.           TempStr := TempStr + 'IV';
  266.           Number := Number - 4;
  267.         End;
  268.       { Now Number < 4!!! One 'I' for every 1 }
  269.       TempStr := TempStr + Copy ('III', 1, Number);
  270.     End;
  271.   End;
  272.   Roman := TempStr;
  273. End;
  274.  
  275.